package lvm.struct;

import lvm.LvmException;


public class Nil extends Atome implements Liste{
	public static final Nil NIL = new Nil();
	
	/**
	 * Constructeur de la classe Singleton Nil
	 */
	private Nil() {}
	
	/**
	 * @return une erreur (pas de car pour Nil)
	 * @throws LvmException
	 */
	public Sexpr getCar() throws LvmException {
		throw new LvmException("Appel de CAR sur Nil");
	}
	
	/**
	 * @return une erreur (pas de cdr pour Nil)
	 * @throws LvmException
	 */
	public Sexpr getCdr() throws LvmException {
		throw new LvmException("Appel de CDR sur Nil");
	}
	
	/** Évalue la S-expr
	 * @return le résultat de l'évaluation de la S-expr
	 */
	public Sexpr eval() throws LvmException {
		return this;
	}
	
	/**
	 * @return La représentation textuelle de la Sexpr
	 */
	public String toString() {
		return "()";
	}

	public boolean equals(Sexpr arg) throws LvmException {
		return (arg instanceof Nil);
	}
}